#!/usr/bin/env python
"""主程序入口"""
import sys
import os

# 添加项目根目录到路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

# 先导入 CLI 模块来解析参数（包括版本检查）
from db2word.cli import parse_args

# 解析命令行参数（如果用户使用 -v/--version，这里会显示版本并退出）
args = parse_args()

# 只有在不是查看版本的情况下，才导入其他模块
from db2word.db_connector import DatabaseConnector
from db2word.schema_extractor import SchemaExtractor
from db2word.doc_generator import DocGenerator


def main():
    """主函数"""
    try:
        
        # 打印开始信息
        print(f"正在连接数据库 {args.type}://{args.user}@{args.host}:{args.port}/{args.database}...")
        
        # 连接数据库
        connector = DatabaseConnector(
            host=args.host,
            port=args.port,
            database=args.database,
            db_type=args.type,
            user=args.user,
            password=args.password
        )
        
        try:
            connector.connect()
            print("数据库连接成功！")
            
            # 提取 Schema
            print("正在提取数据库表结构...")
            extractor = SchemaExtractor(connector.engine, args.type)
            schema = extractor.get_table_schema()
            
            if not schema:
                print("警告: 数据库中没有找到任何表。")
                return
            
            print(f"找到 {len(schema)} 个表: {', '.join(sorted(schema.keys()))}")
            
            # 生成 Word 文档
            output_path = args.output or f"{args.database}_schema.docx"
            print(f"正在生成 Word 文档: {output_path}...")
            
            generator = DocGenerator(args.database)
            generator.generate(schema, output_path)
            
            print(f"文档生成成功: {output_path}")
            
        finally:
            connector.close()
            
    except KeyboardInterrupt:
        print("\n\n操作已取消。")
        sys.exit(1)
    except Exception as e:
        print(f"\n错误: {str(e)}", file=sys.stderr)
        sys.exit(1)


if __name__ == '__main__':
    main()

